# Python 常见运算符示例

# 定义两个变量
a = 10
b = 3

# 1. 算术运算符
print("=== 算术运算符 ===")
print(f"a + b = {a + b}")  # 加法
print(f"a - b = {a - b}")  # 减法
print(f"a * b = {a * b}")  # 乘法
print(f"a / b = {a / b}")  # 除法
print(f"a // b = {a // b}")  # 整除
print(f"a % b = {a % b}")  # 取模，求余
print(f"a ** b = {a**b}")  # 幂运算

# 2. 比较运算符
print("\n=== 比较运算符 ===")
print(f"a > b: {a > b}")
print(f"a < b: {a < b}")
print(f"a == b: {a == b}")
print(f"a != b: {a != b}")
print(f"a >= b: {a >= b}")
print(f"a <= b: {a <= b}")

# 3. 赋值运算符
print("\n=== 赋值运算符 ===")
c = a  # 简单赋值
print(f"c = a: {c}")
c += b  # 等价于 c = c + b
print(f"c += b: {c}")
c -= b  # 等价于 c = c - b
print(f"c -= b: {c}")
c *= b  # 等价于 c = c * b
print(f"c *= b: {c}")
c /= b  # 等价于 c = c / b
print(f"c /= b: {c}")

# 4. 逻辑运算符
print("\n=== 逻辑运算符 ===")
x = True
y = False
print(f"x and y: {x and y}")  # 与，只有两个都为True时，才为True
print(f"x or y: {x or y}")  # 或，只要有一个为True，就为True
print(f"not x: {not x}")  # 非，取反

# 5. 位运算符（二进制）
print("\n=== 位运算符 ===")
d = 60  # 60 = 0011 1100
e = 13  # 13 = 0000 1101
print(
    f"d & e: {d & e}"
)  # 按位与，相同位的两个数字都为1，则为1；若有一个不为1，则为0，= 0000 1100
print(f"d | e: {d | e}")  # 按位或，相同位只要一个为1，那么结果就是1，= 0011 1101
print(f"d ^ e: {d ^ e}")  # 按位异或，相同位不同则为1，相同则为0，= 0011 0001
print(
    f"~d: {~d}"
)  # 按位取反，对数据的每个二进制位取反，即把1变为0，把0变为1，= 1100 0011，最高位为符号位，所以为负数，补码为1100 0011，反码为1011 1100，原码为1011 1101，即-61
print(f"d << 2: {d << 2}")  # 左移，高位丢弃，低位补0，= 1111 0000
print(f"d >> 2: {d >> 2}")  # 右移，低位丢弃，高位补0，= 0000 1111

# 6. 成员运算符
print("\n=== 成员运算符 ===")
list1 = [1, 2, 3, 4, 5]
print(f"3 in list1: {3 in list1}")
print(f"6 not in list1: {6 not in list1}")

# 7. 身份运算符
print("\n=== 身份运算符 ===")
f = [1, 2, 3]
g = f
h = [1, 2, 3]
print(f"f is g: {f is g}")
print(f"f is h: {f is h}")  # 内存地址不同，值相同，所以为False
print(f"f == h: {f == h}")  # 值应该是相等的
print(f"f is not h: {f is not h}")
# None 关键字是特殊的常量，None和任何其他的数据类型比较永远返回False。
# None有自己的数据类型NoneType。
i = None
print(f"type(i): {type(i)}")
print(f"i is None: {i is None}")
print(f"i is not None: {i is not None}")

# 8. 运算符优先级
print("\n=== 运算符优先级 ===")
print("""
1. 括号
2. 幂运算
3. 正负号
4. 乘法、除法、取模、整除
5. 加法、减法
6. 比较运算符
7. 逻辑运算符
8. 赋值运算符
""")
